home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / security / BasicPermissionCollection.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  3.7 KB  |  125 lines

  1. package java.security;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.ObjectOutputStream;
  6. import java.io.ObjectStreamField;
  7. import java.io.Serializable;
  8. import java.util.Collections;
  9. import java.util.Enumeration;
  10. import java.util.HashMap;
  11. import java.util.Hashtable;
  12. import java.util.Map;
  13.  
  14. final class BasicPermissionCollection extends PermissionCollection implements Serializable {
  15.    private static final long serialVersionUID = 739301742472979399L;
  16.    private transient Map perms = new HashMap(11);
  17.    private boolean all_allowed = false;
  18.    private Class permClass;
  19.    private static final ObjectStreamField[] serialPersistentFields;
  20.  
  21.    public BasicPermissionCollection() {
  22.    }
  23.  
  24.    public void add(Permission var1) {
  25.       if (!(var1 instanceof BasicPermission)) {
  26.          throw new IllegalArgumentException("invalid permission: " + var1);
  27.       } else if (this.isReadOnly()) {
  28.          throw new SecurityException("attempt to add a Permission to a readonly PermissionCollection");
  29.       } else {
  30.          BasicPermission var2 = (BasicPermission)var1;
  31.          if (this.perms.size() == 0) {
  32.             this.permClass = var2.getClass();
  33.          } else if (var2.getClass() != this.permClass) {
  34.             throw new IllegalArgumentException("invalid permission: " + var1);
  35.          }
  36.  
  37.          synchronized(this) {
  38.             this.perms.put(var2.getCanonicalName(), var1);
  39.          }
  40.  
  41.          if (!this.all_allowed && var2.getCanonicalName().equals("*")) {
  42.             this.all_allowed = true;
  43.          }
  44.  
  45.       }
  46.    }
  47.  
  48.    public boolean implies(Permission var1) {
  49.       if (!(var1 instanceof BasicPermission)) {
  50.          return false;
  51.       } else {
  52.          BasicPermission var2 = (BasicPermission)var1;
  53.          if (var2.getClass() != this.permClass) {
  54.             return false;
  55.          } else if (this.all_allowed) {
  56.             return true;
  57.          } else {
  58.             String var3 = var2.getCanonicalName();
  59.             Permission var4;
  60.             synchronized(this) {
  61.                var4 = (Permission)this.perms.get(var3);
  62.             }
  63.  
  64.             if (var4 != null) {
  65.                return var4.implies(var1);
  66.             } else {
  67.                int var5;
  68.                for(int var6 = var3.length() - 1; (var5 = var3.lastIndexOf(".", var6)) != -1; var6 = var5 - 1) {
  69.                   var3 = var3.substring(0, var5 + 1) + "*";
  70.                   synchronized(this) {
  71.                      var4 = (Permission)this.perms.get(var3);
  72.                   }
  73.  
  74.                   if (var4 != null) {
  75.                      return var4.implies(var1);
  76.                   }
  77.                }
  78.  
  79.                return false;
  80.             }
  81.          }
  82.       }
  83.    }
  84.  
  85.    public Enumeration elements() {
  86.       synchronized(this) {
  87.          return Collections.enumeration(this.perms.values());
  88.       }
  89.    }
  90.  
  91.    private void writeObject(ObjectOutputStream var1) throws IOException {
  92.       Hashtable var2 = new Hashtable(this.perms.size() * 2);
  93.       synchronized(this) {
  94.          var2.putAll(this.perms);
  95.       }
  96.  
  97.       ObjectOutputStream.PutField var3 = var1.putFields();
  98.       var3.put("all_allowed", this.all_allowed);
  99.       var3.put("permissions", var2);
  100.       var3.put("permClass", this.permClass);
  101.       var1.writeFields();
  102.    }
  103.  
  104.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  105.       ObjectInputStream.GetField var2 = var1.readFields();
  106.       Hashtable var3 = (Hashtable)var2.get("permissions", (Object)null);
  107.       this.perms = new HashMap(var3.size() * 2);
  108.       this.perms.putAll(var3);
  109.       this.all_allowed = var2.get("all_allowed", false);
  110.       this.permClass = (Class)var2.get("permClass", (Object)null);
  111.       if (this.permClass == null) {
  112.          Enumeration var4 = var3.elements();
  113.          if (var4.hasMoreElements()) {
  114.             Permission var5 = (Permission)var4.nextElement();
  115.             this.permClass = var5.getClass();
  116.          }
  117.       }
  118.  
  119.    }
  120.  
  121.    static {
  122.       serialPersistentFields = new ObjectStreamField[]{new ObjectStreamField("permissions", Hashtable.class), new ObjectStreamField("all_allowed", Boolean.TYPE), new ObjectStreamField("permClass", Class.class)};
  123.    }
  124. }
  125.